//package com.szholly.data.mongodb;
//
//import java.net.UnknownHostException;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Set;
//import java.util.UUID;
//
//import net.sf.jsqlparser.JSQLParserException;
//
//import org.apache.log4j.Logger;
//import org.springframework.context.annotation.Scope;
//import org.springframework.stereotype.Component;
//
//import com.szholly.utils.util.StringUtils;
//import com.szholly.data.common.delegate.*;
//import com.szholly.data.general.*;
//import com.szholly.data.general.configuration.DefulatConfig;
//import com.mongodb.*;
//
///**
// * 定义MongoDb工作空间
// */
//@Component("Workspace_DB_MongoDb")
//@Scope("prototype")
//public class MongodbWorkspaceClass implements IWorkspace {
//
//	private static Logger logger = Logger.getLogger(MongodbWorkspaceClass.class);
//
//	/**
//	 * 获取mongodb数据服务操作对象
//	 */
//	protected Mongo mongo;
//	/**
//	 * 获取数据库对象
//	 */
//	protected DB db;
//	/**
//	 * 获取数据连接对象
//	 */
//	protected ConnectionInfo info;
//
//	public MongodbWorkspaceClass(ConnectionInfo info) {
//		this.info = info;
//		try {
//			mongo = new Mongo(info.getServer(),
//					Integer.parseInt(info.getPort()));
//			MongoOptions options = mongo.getMongoOptions();
//			options.autoConnectRetry = true;
//			options.connectionsPerHost = DefulatConfig.defulatConfig.maxActive;
//			db = mongo.getDB(info.getDatabase());
//		} catch (NumberFormatException e) {
//			logger.error("【MongodbWorkspaceClass】 服务器端口配置错误！", e);
//			throw e;
//		} catch (UnknownHostException e) {
//			logger.error("【MongodbWorkspaceClass】 服务器连接错误！", e);
//			throw new RuntimeException("服务器连接错误！");
//		}
//	}
//
//	/**
//	 * 替换SQL语句，用于数据库的差异化执行
//	 */
//	protected String replaceSql(String sql, GlobalParameter[] para) {
//		sql = sql.replace("[", "").replace("]", "");
//		if (para == null) {
//			return sql;
//		} else {
//			for (GlobalParameter item : para) {
//				sql = sql.replace(item.getParaName(), "?");
//			}
//			return sql;
//		}
//	}
//
//	@Override
//	public String getAutoSql(ITable pTable, String fieldName) {
//		return null;
//	}
//
//	@Override
//	public boolean fieldExist(String name, String fieldName) {
//		return true;
//	}
//
//	@Override
//	public ITableInfo getTableMetadate(String objName) {
//		return null;
//	}
//
//	@Override
//	public boolean objectExist(String objName) {
//		logger.info("objectExist" + objName);
//		return db.collectionExists(objName);
//	}
//
//	@Override
//	public TableType getObjectType(String objName) {
//		logger.info("getObjectType" + objName);
//		return TableType.Table;
//	}
//
//	@Override
//	public String[] getObjects(TableType tableType) {
//		logger.info("getObjects" + tableType.toString());
//		Set<String> setList = db.getCollectionNames();
//		return setList.toArray(new String[setList.size()]);
//	}
//
//	@Override
//	public void deleteObject(TableType tableType, String objName) {
//		logger.info("deleteObject" + objName);
//		DBCollection dbc = db.getCollection(objName);
//		if (dbc != null) {
//			dbc.drop();
//		}
//	}
//
//	@Override
//	public void rename(String oldTableName, String newTableName) {
//		logger.info("rename" + oldTableName+" to "+newTableName);
//		DBCollection dbc = db.getCollection(oldTableName);
//		if (dbc != null) {
//			dbc.rename(newTableName);
//		}
//	}
//
//	@Override
//	public void createTable(ITableInfo tableInfo, String tableName) {
//		logger.info("createTable" + tableName);
//		DBObject para = new BasicDBObject();
//		para.put("autoIndexID", true);
//		db.createCollection(tableName, para);
//	}
//
//	@Override
//	public void updateTable(ITableInfo tableInfo, String tableName) {
//
//	}
//
//	@Override
//	public void createOrUpdateView(String viewName, String selectSql,
//			boolean isStatic) {
//		throw new RuntimeException("不能创建视图！");
//	}
//
//	@Override
//	public WorkspaceType getWorkspaceType() {
//		return WorkspaceType.MongoDb;
//	}
//
//	@Override
//	public String getDatabase() {
//		return info.getDatabase();
//	}
//
//	@Override
//	public String getNetName() {
//		return info.getNetName();
//	}
//
//	@Override
//	public String getServer() {
//		return info.getServer();
//	}
//
//	@Override
//	public String getUserID() {
//		return info.getUserID();
//	}
//
//	@Override
//	public String getPassword() {
//		return info.getPassword();
//	}
//
//	@Override
//	public String getPort() {
//		return info.getPort();
//	}
//
//	@Override
//	public String getVersion() {
//		return info.getVersion();
//	}
//
//	@Override
//	public String getConnectionString() {
//		return info.getConnectionStr();
//	}
//
//	@Override
//	public void startEditing() {
//
//	}
//
//	@Override
//	public void stopEditing(boolean saveEdits) {
//
//	}
//
//	@Override
//	public boolean isBeingEdited() {
//		return false;
//	}
//
//	@Override
//	public void close() {
//
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果IDataReader
//	 *
//	 * @param strSql
//	 * @param para
//	 * @param dataDelegate
//	 */
//	@Override
//	public <T extends RowBase> void getDataReader(Class<T> c, String strSql,
//			GlobalParameter[] para, DataReaderDelegate dataDelegate) {
//		if (dataDelegate == null) {
//			return;
//		}
//
//		strSql = replaceSql(strSql, para);
//		logger.info("getDataReader" + strSql);
//		SqlParserResult parserResult = null;
//		try {
//			parserResult = SqlParserUtils.parserSql(strSql, para);
//		} catch (JSQLParserException e) {
//			throw new RuntimeException("SQL语句解释错误！原因：" + e.getMessage());
//		}
//		if (parserResult.sqlType != SqlType.Select) {
//			throw new RuntimeException("getDataReader方法的SQL语句只能为select语句！");
//		}
//
//		// 没有分组信息
//		if (parserResult.groupBy == null || parserResult.groupBy.size() <= 0) {
//			DBCollection collection = db.getCollection(parserResult.tableName);
//			if (collection == null) {
//				throw new RuntimeException("当前指定的数据表" + parserResult.tableName
//						+ "不存在！");
//			}
//			// 没有函数表达式
//			if (!parserResult.hasFunctionSelectField) {
//				DBCursor cursor = collection.find(parserResult.whereObject)
//						.sort(parserResult.orderByObject);
//				DBCursorDataReader<T> reader = new DBCursorDataReader<T>(c, cursor);
//				dataDelegate.invokeDataReader(reader, null);
//			} else {
//				throw new RuntimeException("getDataReader方法的SQL语句不支持参数解释！");
//			}
//		} else {
//			// 有分组信息
//			throw new RuntimeException("getDataReader方法的SQL语句不支持分组信息！");
//		}
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果IDataReader
//	 *
//	 * @param tableName
//	 * @param queryFilter
//	 * @param dataDelegate
//	 */
//	@Override
//	public <T extends RowBase> void getDataReader(Class<T> c, ITable pTable,
//			IQueryFilter queryFilter, DataReaderDelegate dataDelegate) {
//		if (queryFilter == null) {
//			queryFilter = new QueryFilter();
//		}
//		String sql = queryFilter.toSql(pTable);
//		getDataReader(c, sql, queryFilter.getWhereParameter(), dataDelegate);
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果IDataReader
//	 *
//	 * @param tableName
//	 * @param queryMap
//	 * @param dataDelegate
//	 */
//	@Override
//	public <T extends RowBase> void getDataReader(Class<T> c, ITable pTable,
//			IQueryMap queryMap, DataReaderDelegate dataDelegate) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//
//		logger.info("getDataReader" + queryMap.getKey());
//
//		DBObject whereObject = null;
//		DBObject orderByObject = null;
//		if (queryMap != null) {
//			whereObject = queryMap.getWhereObject();
//			orderByObject = queryMap.getOrderByObject();
//		}
//		optionWhere(pTable, whereObject);
//		optionWhere(pTable, orderByObject);
//
//		DBCursor cursor = collection.find(whereObject).sort(orderByObject);
//		DBCursorDataReader<T> reader = new DBCursorDataReader<T>(c, cursor);
//		dataDelegate.invokeDataReader(reader, null);
//	}
//
//	/**
//	 * 返回DataReader数据
//	 */
//	@Override
//	public <T extends RowBase> void getDataReader(Class<T> c, ITable pTable,
//			RowBase queryFilter, DataReaderDelegate dataDelegate) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//
//		logger.info("getDataReader" + queryFilter.getKey());
//
//		DBObject whereObject = null;
//		if (queryFilter != null) {
//			whereObject = queryFilter.getWhereObject();
//		}
//		optionWhere(pTable, whereObject);
//
//		DBCursor cursor = collection.find(whereObject);
//		DBCursorDataReader<T> reader = new DBCursorDataReader<T>(c, cursor);
//		dataDelegate.invokeDataReader(reader, null);
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果object
//	 *
//	 * @param sqlString
//	 * @param para
//	 * @return
//	 */
//	@Override
//	public Object getExecuteScalar(String strSql, GlobalParameter[] para) {
//		strSql = replaceSql(strSql, para);
//		SqlParserResult parserResult = null;
//		try {
//			parserResult = SqlParserUtils.parserSql(strSql, para);
//		} catch (JSQLParserException e) {
//			throw new RuntimeException("SQL语句解释错误！原因：" + e.getMessage());
//		}
//		if (parserResult.sqlType != SqlType.Select) {
//			throw new RuntimeException("getExecuteScalar方法的SQL语句只能为select语句！");
//		}
//
//		logger.info("getExecuteScalar" + strSql);
//
//		// 没有分组信息
//		if (parserResult.groupBy == null || parserResult.groupBy.size() <= 0) {
//			DBCollection collection = db.getCollection(parserResult.tableName);
//			if (collection == null) {
//				throw new RuntimeException("当前指定的数据表" + parserResult.tableName
//						+ "不存在！");
//			}
//			// 没有函数表达式
//			if (!parserResult.hasFunctionSelectField) {
//				if (parserResult.selectFiels.size() <= 0) {
//					throw new RuntimeException(
//							"getExecuteScalar方法的SQL语句中不包括查询列！");
//				} else {
//					DBObject row = null;
//					String oneFiled = parserResult.selectFiels.get(0);
//					if (oneFiled.equals("*")) {
//						row = collection.findOne(parserResult.whereObject,
//								null, parserResult.orderByObject);
//					} else {
//						DBObject fields = new BasicDBObject();
//						fields.put(oneFiled, 1);
//						row = collection.findOne(parserResult.whereObject,
//								fields, parserResult.orderByObject);
//					}
//					if (row == null) {
//						return null;
//					} else {
//						return row.get(oneFiled);
//					}
//				}
//			} else {
//				// 有函数表达式
//				if (parserResult.selectFiels != null
//						&& parserResult.selectFiels.size() == 1) {
//					String functionName = parserResult.selectFiels.get(0);
//					String[] fMsg = functionName.split(",");
//					functionName = fMsg[0];
//					if (functionName.equals("COUNT")) {
//						DBCursor cursor = collection
//								.find(parserResult.whereObject);
//						return cursor.count();
//					} else {
//						throw new RuntimeException(
//								"getExecuteScalar方法的SQL语句中不支持" + functionName
//										+ "函数！");
//					}
//				} else {
//					throw new RuntimeException("在没有Group by的查询语句中只能有一个函数列！");
//				}
//			}
//		} else {
//			// 有分组信息
//			throw new RuntimeException("getExecuteScalar方法的SQL语句不支持分组信息！");
//		}
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果object
//	 *
//	 * @param queryFilter
//	 * @return
//	 */
//	@Override
//	public Object getExecuteScalar(ITable pTable, IQueryFilter queryFilter) {
//		if (queryFilter == null) {
//			queryFilter = new QueryFilter();
//		}
//		String sql = queryFilter.toSql(pTable);
//		logger.info("getExecuteScalar" + sql);
//		return getExecuteScalar(sql, queryFilter.getWhereParameter());
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果object
//	 *
//	 * @param queryFilter
//	 * @return
//	 */
//	@Override
//	public Object getExecuteScalar(ITable pTable, IQueryMap queryFilter) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//
//		logger.info("getExecuteScalar" + queryFilter.getKey());
//
//		DBObject whereObject = null;
//		DBObject orderByObject = null;
//		boolean hasCount = false;
//		String oneFiled = "";
//		if (queryFilter != null) {
//			whereObject = queryFilter.getWhereObject();
//			orderByObject = queryFilter.getOrderByObject();
//
//			String selectFields = queryFilter.getSelectFields();
//			if (!StringUtils.IsNullOrSpace(selectFields)) {
//				String[] fiels = selectFields.split(",");
//				oneFiled = fiels[0];
//			} else {
//				oneFiled = "*";
//			}
//			if (oneFiled.toLowerCase().contains("count(")) {
//				hasCount = true;
//			}
//		}
//
//		optionWhere(pTable, whereObject);
//		optionWhere(pTable, orderByObject);
//
//		if (hasCount) {
//			DBCursor cursor = collection.find(whereObject);
//			return cursor.count();
//		} else {
//			DBObject row = null;
//			if (oneFiled.equals("*")) {
//				row = collection.findOne(whereObject, null, orderByObject);
//			} else {
//				DBObject fields = new BasicDBObject();
//				fields.put(oneFiled, 1);
//				row = collection.findOne(whereObject, fields, orderByObject);
//			}
//			if (row == null) {
//				return null;
//			} else {
//				return row.get(oneFiled);
//			}
//		}
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果object
//	 *
//	 * @param queryFilter
//	 * @return
//	 */
//	@Override
//	public Object getExecuteScalar(ITable pTable, RowBase queryFilter) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//
//		logger.info("getExecuteScalar" + queryFilter.getKey());
//
//		DBObject whereObject = null;
//		DBObject orderByObject = null;
//		String oneFiled = "";
//		if (queryFilter != null) {
//			whereObject = queryFilter.getWhereObject();
//			oneFiled = "*";
//		}
//
//		optionWhere(pTable, whereObject);
//		optionWhere(pTable, orderByObject);
//
//		DBObject row = null;
//		if (oneFiled.equals("*")) {
//			row = collection.findOne(whereObject, null, orderByObject);
//		} else {
//			DBObject fields = new BasicDBObject();
//			fields.put(oneFiled, 1);
//			row = collection.findOne(whereObject, fields, orderByObject);
//		}
//		if (row == null) {
//			return null;
//		} else {
//			return row.get(oneFiled);
//		}
//	}
//
//	/**
//	 * 获取实体类，根据实体信息
//	 */
//	@SuppressWarnings("unchecked")
//	@Override
//	public <T extends RowBase> T getEntity(Class<T> c, ITable pTable,
//			RowBase queryRow) {
//		logger.info("getEntity" + queryRow.getKey());
//		DataReaderDelegate dataReaderDelegate = new DataReaderDelegateClass();
//		T entity = null;
//		getDataReader(c, pTable, queryRow, dataReaderDelegate);
//		entity = (T) dataReaderDelegate.paraObject;
//		return entity;
//	}
//
//	/**
//	 * 获取实体类，根据查询信息
//	 *
//	 * @param queryFilter
//	 * @return
//	 */
//	@SuppressWarnings("unchecked")
//	@Override
//	public <T extends RowBase> T getEntity(Class<T> c, ITable pTable,
//			IQueryFilter queryFilter) {
//		logger.info("getEntity" + queryFilter.getKey());
//		DataReaderDelegate dataReaderDelegate = new DataReaderDelegateClass();
//		T entity = null;
//		getDataReader(c, pTable, queryFilter, dataReaderDelegate);
//		entity = (T) dataReaderDelegate.paraObject;
//		return entity;
//	}
//
//	private class DataReaderDelegateClass extends DataReaderDelegate {
//		@Override
//		public void invokeDataReader(IDataReader reader, Object tag) {
//			RowBase t = null;
//			if (reader.read()) {
//				t = reader.getRow();
//			}
//			paraObject = t;
//		}
//	}
//
//	/**
//	 * 获取实体类，根据查询信息
//	 *
//	 * @param queryFilter
//	 * @return
//	 */
//	@SuppressWarnings("unchecked")
//	@Override
//	public <T extends RowBase> T getEntity(Class<T> c, ITable pTable,
//			IQueryMap queryFilter) {
//		logger.info("getEntity" + queryFilter.getKey());
//		DataReaderDelegate dataReaderDelegate = new DataReaderDelegateClass();
//		T entity = null;
//		getDataReader(c, pTable, queryFilter, dataReaderDelegate);
//		entity = (T) dataReaderDelegate.paraObject;
//		return entity;
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果List<RowBase>
//	 *
//	 * @param sqlString
//	 * @param para
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> List<T> getEntityList(Class<T> c,
//			String sqlString, GlobalParameter[] para) {
//		sqlString = replaceSql(sqlString, para);
//		SqlParserResult parserResult = null;
//		logger.info("getEntityList" + sqlString);
//		try {
//			parserResult = SqlParserUtils.parserSql(sqlString, para);
//		} catch (JSQLParserException e) {
//			throw new RuntimeException("SQL语句解释错误！原因：" + e.getMessage());
//		}
//		if (parserResult.sqlType != SqlType.Select) {
//			throw new RuntimeException("getEntityList方法的SQL语句只能为select语句！");
//		}
//
//		// 没有分组信息
//		if (parserResult.groupBy == null || parserResult.groupBy.size() <= 0) {
//			DBCollection collection = db.getCollection(parserResult.tableName);
//			if (collection == null) {
//				throw new RuntimeException("当前指定的数据表" + parserResult.tableName
//						+ "不存在！");
//			}
//			// 没有函数表达式
//			if (!parserResult.hasFunctionSelectField) {
//				DBCursor cursor = collection.find(parserResult.whereObject)
//						.sort(parserResult.orderByObject);
//				List<DBObject> list = cursor.toArray();
//				List<T> resultList = getRowList(c, list);
//				return resultList;
//			} else {
//				throw new RuntimeException("getEntityList方法的SQL语句不支持参数解释！");
//			}
//		} else {
//			// 有分组信息
//			throw new RuntimeException("getEntityList方法的SQL语句不支持分组信息！");
//		}
//	}
//
//	@SuppressWarnings("unchecked")
//	private <T extends RowBase> List<T> getRowList(Class<T> c,
//			List<DBObject> list) {
//		List<T> resultList = new ArrayList<T>();
//		try {
//			for (DBObject item : list) {
//				T rowItem = null;
//				rowItem = c.newInstance();
//				rowItem.setIsNew(false);
//				rowItem.putAll(item.toMap());
//				resultList.add(rowItem);
//			}
//		} catch (InstantiationException e) {
//			e.printStackTrace();
//		}catch( IllegalAccessException ex){
//			ex.printStackTrace();
//		}
//		return resultList;
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果List<RowBase>
//	 *
//	 * @param queryFilter
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> List<T> getEntityList(Class<T> c, ITable pTable,
//			IQueryFilter queryFilter) {
//		if (queryFilter == null) {
//			queryFilter = new QueryFilter();
//		}
//		String sql = queryFilter.toSql(pTable);
//		logger.info("getEntityList" + sql);
//		return getEntityList(c, sql, queryFilter.getWhereParameter());
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果List<RowBase>
//	 *
//	 * @param queryFilter
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> List<T> getEntityList(Class<T> c, ITable pTable,
//			IQueryMap queryFilter) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("getEntityList" + queryFilter.getKey());
//		DBObject whereObject = null;
//		DBObject orderByObject = null;
//		if (queryFilter != null) {
//			whereObject = queryFilter.getWhereObject();
//			orderByObject = queryFilter.getOrderByObject();
//		}
//
//		optionWhere(pTable, whereObject);
//		optionWhere(pTable, orderByObject);
//
//		DBCursor cursor = collection.find(whereObject).sort(orderByObject);
//		List<DBObject> list = cursor.toArray();
//		List<T> resultList = getRowList(c, list);
//		return resultList;
//	}
//
//	/**
//	 * 执行SQL语句返回查询结果List<RowBase>
//	 *
//	 * @param row
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> List<T> getEntityList(Class<T> c, ITable pTable,
//			RowBase row) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("getEntityList" + row.getKey());
//		DBObject whereObject = null;
//		DBObject orderByObject = null;
//		if (row != null) {
//			whereObject = row.getWhereObject();
//		}
//
//		optionWhere(pTable, whereObject);
//		optionWhere(pTable, orderByObject);
//
//		DBCursor cursor = collection.find(whereObject).sort(orderByObject);
//		List<DBObject> list = cursor.toArray();
//		List<T> resultList = getRowList(c, list);
//		return resultList;
//	}
//
//	/**
//	 * 分页查询
//	 *
//	 * @param sql
//	 * @param para
//	 * @param pageInfo
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> List<T> pageSelect(Class<T> c, String strSql,
//			GlobalParameter[] para, PageInfo pageInfo) {
//		strSql = replaceSql(strSql, para);
//		SqlParserResult parserResult = null;
//		logger.info("pageSelect" + strSql);
//		try {
//			parserResult = SqlParserUtils.parserSql(strSql, para);
//		} catch (JSQLParserException e) {
//			throw new RuntimeException("SQL语句解释错误！原因：" + e.getMessage());
//		}
//		if (parserResult.sqlType != SqlType.Select) {
//			throw new RuntimeException("getDataReader方法的SQL语句只能为select语句！");
//		}
//
//		// 没有分组信息
//		if (parserResult.groupBy == null || parserResult.groupBy.size() <= 0) {
//			DBCollection collection = db.getCollection(parserResult.tableName);
//			if (collection == null) {
//				throw new RuntimeException("当前指定的数据表" + parserResult.tableName
//						+ "不存在！");
//			}
//			// 没有函数表达式
//			if (!parserResult.hasFunctionSelectField) {
//				int skip = 0;
//				if(pageInfo.getPageIndex()<=1){
//					pageInfo.setPageIndex(1);
//				}
//				skip = (pageInfo.getPageIndex() - 1) * pageInfo.getPageSize();
//
//				DBCursor cursor = collection.find(parserResult.whereObject)
//						.skip(skip).sort(parserResult.orderByObject)
//						.limit(pageInfo.getPageSize());
//				List<DBObject> list = cursor.toArray();
//				List<T> resultList = getRowList(c, list);
//				return resultList;
//			} else {
//				throw new RuntimeException("getDataReader方法的SQL语句不支持参数解释！");
//			}
//		} else {
//			// 有分组信息
//			throw new RuntimeException("getDataReader方法的SQL语句不支持分组信息！");
//		}
//	}
//
//	/**
//	 * 分页查询
//	 *
//	 * @param tableName
//	 * @param queryFilter
//	 * @param pageInfo
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> List<T> pageSelect(Class<T> c, ITable pTable,
//			IQueryFilter queryFilter, PageInfo pageInfo) {
//		if (queryFilter == null) {
//			queryFilter = new QueryFilter();
//		}
//		String sql = queryFilter.toSql(pTable);
//		logger.info("pageSelect" + sql);
//		return pageSelect(c, sql, queryFilter.getWhereParameter(), pageInfo);
//	}
//
//	/**
//	 * 分页查询
//	 *
//	 * @param tableName
//	 * @param queryFilter
//	 * @param pageInfo
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> List<T> pageSelect(Class<T> c, ITable pTable,
//			IQueryMap queryFilter, PageInfo pageInfo) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("pageSelect" + queryFilter.getKey());
//		DBObject whereObject = null;
//		DBObject orderByObject = null;
//		if (queryFilter != null) {
//			whereObject = queryFilter.getWhereObject();
//			orderByObject = queryFilter.getOrderByObject();
//		}
//
//		optionWhere(pTable, whereObject);
//		optionWhere(pTable, orderByObject);
//
//		int skip = 0;
//		if(pageInfo.getPageIndex()<=1){
//			pageInfo.setPageIndex(1);
//		}
//		skip = (pageInfo.getPageIndex() - 1) * pageInfo.getPageSize();
//
//		DBCursor cursor = collection.find(whereObject).skip(skip)
//				.sort(orderByObject).limit(pageInfo.getPageSize());
//		List<DBObject> list = cursor.toArray();
//		List<T> resultList = getRowList(c, list);
//		return resultList;
//	}
//
//	/**
//	 * 分页查询
//	 *
//	 * @param tableName
//	 * @param queryFilter
//	 * @param pageInfo
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> List<T> pageSelect(Class<T> c, ITable pTable,
//			RowBase queryFilter, PageInfo pageInfo) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("pageSelect" + queryFilter.getKey());
//		DBObject whereObject = null;
//		DBObject orderByObject = null;
//		if (queryFilter != null) {
//			whereObject = queryFilter.getWhereObject();
//		}
//
//		optionWhere(pTable, whereObject);
//		optionWhere(pTable, orderByObject);
//
//		int skip = 0;
//		if(pageInfo.getPageIndex()<=1){
//			pageInfo.setPageIndex(1);
//		}
//		skip = (pageInfo.getPageIndex() - 1) * pageInfo.getPageSize();
//
//		DBCursor cursor = collection.find(whereObject).skip(skip)
//				.sort(orderByObject).limit(pageInfo.getPageSize());
//		List<DBObject> list = cursor.toArray();
//		List<T> resultList = getRowList(c, list);
//		return resultList;
//	}
//
//	/**
//	 * 获取某列的最大值
//	 *
//	 * @param fieldName
//	 * @param otherCondition
//	 * @param paras
//	 * @return
//	 */
//	@Override
//	public long getSpecFieldMaxValue(ITable pTable, String fieldName,
//			String otherCondition, GlobalParameter[] paras) {
//		return -1;
//	}
//
//	/**
//	 * 获取某列的最小值
//	 *
//	 * @param fieldName
//	 * @param otherCondition
//	 * @param paras
//	 * @return
//	 */
//	@Override
//	public long getSpecFieldMinValue(ITable pTable, String fieldName,
//			String otherCondition, GlobalParameter[] paras) {
//		return -1;
//	}
//
//	/**
//	 * 获取下一个要素，如果没有返回null
//	 *
//	 * @param t
//	 * @param byFieldName
//	 * @param whereString
//	 * @param orderByType
//	 * @param addCaptionField
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> T getNextEntity(Class<T> c, ITable pTable,
//			RowBase t, String byFieldName, String whereString,
//			OrderByType orderByType, boolean addCaptionField) {
//		if (t == null || StringUtils.IsNullOrEmpty(byFieldName))
//			return null;
//
//		IQueryFilter queryFilter = new QueryFilter();
//		queryFilter.setAddCaptionField(addCaptionField);
//		switch (orderByType) {
//		case ASC:
//			queryFilter.setWhereString(byFieldName + " > @curvalue ");
//			queryFilter.setOrderByString(byFieldName + " ASC ");
//			break;
//		case DESC:
//			queryFilter.setWhereString(byFieldName + " < @curvalue ");
//			queryFilter.setOrderByString(byFieldName + " DESC ");
//			break;
//		}
//
//		if (!StringUtils.IsNullOrSpace(whereString))
//			queryFilter.setWhereString(queryFilter.getWhereString() + " and ("
//					+ whereString + ") ");
//
//		queryFilter
//				.setWhereParameter(new GlobalParameter[] { new GlobalParameter(
//						"@curvalue", ((RowBase) t).getValue(
//								GlobalDataType.String, byFieldName)) });
//		return getEntity(c, pTable, queryFilter);
//	}
//
//	/**
//	 * 获取上一个要素，如果没有返回null
//	 *
//	 * @param t
//	 * @param byFieldName
//	 * @param whereString
//	 * @param orderByType
//	 * @param addCaptionField
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> T getPerEntity(Class<T> c, ITable pTable,
//			RowBase t, String byFieldName, String whereString,
//			OrderByType orderByType, boolean addCaptionField) {
//		if (t == null || StringUtils.IsNullOrEmpty(byFieldName))
//			return null;
//
//		IQueryFilter queryFilter = new QueryFilter();
//		queryFilter.setAddCaptionField(addCaptionField);
//		switch (orderByType) {
//		case ASC:
//			queryFilter.setWhereString(byFieldName + " < @curvalue ");
//			queryFilter.setOrderByString(byFieldName + " DESC ");
//			break;
//		case DESC:
//			queryFilter.setWhereString(byFieldName + " > @curvalue ");
//			queryFilter.setOrderByString(byFieldName + " ASC ");
//			break;
//		}
//
//		if (!StringUtils.IsNullOrSpace(whereString))
//			queryFilter.setWhereString(queryFilter.getWhereString() + " and ("
//					+ whereString + ") ");
//
//		queryFilter
//				.setWhereParameter(new GlobalParameter[] { new GlobalParameter(
//						"@curvalue", ((RowBase) t).getValue(
//								GlobalDataType.String, byFieldName)) });
//		return getEntity(c, pTable, queryFilter);
//	}
//
//	/**
//	 * 保存对象
//	 *
//	 * @param row
//	 */
//	@Override
//	public void save(ITable pTable, RowBase row) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		optionGuid(pTable, row);
//		BasicDBObject dbObject = new BasicDBObject(row);
//		optionDBObject(pTable, row, dbObject);
//		collection.save(dbObject);
//	}
//
//	/**
//	 * 处理GUID与_id问题
//	 * @param pTable
//	 * @param dbObject
//	 */
//	private void optionWhere(ITable pTable, DBObject dbObject){
//		if(dbObject==null){
//			return;
//		}
//		if(dbObject.containsField(pTable.getGUIDFieldName())){
//			Object obj = dbObject.get(pTable.getGUIDFieldName());
//			dbObject.removeField(pTable.getGUIDFieldName());
//			dbObject.put("_id", obj);
//		}
//	}
//
//	private void optionDBObject(ITable pTable, RowBase row,
//			BasicDBObject dbObject) {
//		if(dbObject.containsField("childValues")){
//			dbObject.removeField("childValues");
//		}
//		if(dbObject.containsField("$$hashKey")){
//			dbObject.removeField("$$hashKey");
//		}
//		if(dbObject.containsField("FIELD_ISNEW")){
//			dbObject.removeField("FIELD_ISNEW");
//		}
//		dbObject.remove("_id");
//		dbObject.put("_id", row.get(pTable.getGUIDFieldName()));
//	}
//
//	/**
//	 * 处理GUID
//	 *
//	 * @param pTable
//	 * @param entity
//	 */
//	protected void optionGuid(ITable pTable, RowBase entity) {
//		// 处理GUID值
//		if (!StringUtils.IsNullOrSpace(pTable.getGUIDFieldName())) {
//			Object obj = entity.getValue(pTable.getGUIDFieldName());
//			if (obj == null) {
//				UUID guid = UUID.randomUUID();
//				entity.setValue(pTable.getGUIDFieldName(), guid.toString());
//			}
//		}
//	}
//
//	/**
//	 * 批量保存对象
//	 */
//	@Override
//	public <T extends RowBase> void save(ITable pTable, List<T> rowList) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("save" + pTable.getTableName());
//		for (RowBase item : rowList) {
//			optionGuid(pTable, item);
//			BasicDBObject dbObject = new BasicDBObject(item);
//			optionDBObject(pTable, item, dbObject);
//			collection.save(dbObject);
//		}
//	}
//
//	/**
//	 * 插入对象
//	 *
//	 * @param row
//	 */
//	@Override
//	public void insert(ITable pTable, RowBase row) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("insert" + pTable.getTableName());
//		optionGuid(pTable, row);
//		BasicDBObject dbObject = new BasicDBObject(row);
//		optionDBObject(pTable, row, dbObject);
//		collection.insert(dbObject);
//	}
//
//	/**
//	 * 插入对象
//	 *
//	 * @param row
//	 */
//	@Override
//	public <T extends RowBase> void insert(ITable pTable, List<T> rowList) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("insert" + pTable.getTableName());
//		for (RowBase item : rowList) {
//			optionGuid(pTable, item);
//			BasicDBObject dbObject = new BasicDBObject(item);
//			optionDBObject(pTable, item, dbObject);
//			collection.insert(dbObject);
//		}
//	}
//
//	/**
//	 * 更新或添加行
//	 *
//	 * @param entity
//	 * @return
//	 */
//	@Override
//	public void update(ITable pTable, RowBase entity) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("update" + pTable.getTableName());
//		BasicDBObject dbObject = new BasicDBObject(entity);
//		optionDBObject(pTable, entity, dbObject);
//		collection.save(dbObject);
//	}
//
//	/**
//	 * 更新或添加行
//	 *
//	 * @param entity
//	 * @return
//	 */
//	@Override
//	public <T extends RowBase> void update(ITable pTable, List<T> rowList) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("update" + pTable.getTableName());
//		for (RowBase item : rowList) {
//			BasicDBObject dbObject = new BasicDBObject(item);
//			optionDBObject(pTable, item, dbObject);
//			collection.save(dbObject);
//		}
//	}
//
//	/**
//	 * 更新数据
//	 *
//	 * @param updateFilter
//	 */
//	@Override
//	public void update(ITable pTable, IUpdateFilter updateFilter) {
//		if (updateFilter == null) {
//			return;
//		}
//		String sql = updateFilter.toSql(pTable);
//		logger.info("update" + sql);
//		executeSql(sql, updateFilter.getWhereParameter());
//	}
//
//	/**
//	 * 更新数据
//	 *
//	 * @param updateFilter
//	 */
//	@Override
//	public void update(ITable pTable, IUpdateMap updateFilter) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("update" + pTable.getTableName());
//		DBObject whereObject = null;
//		DBObject setObject = null;
//		if (updateFilter != null) {
//			whereObject = updateFilter.getWhereObject();
//			setObject = updateFilter.getSetObject();
//		}
//		collection.update(whereObject, setObject, true, true);
//	}
//
//	/**
//	 * 删除表记录
//	 */
//	@Override
//	public void delete(ITable pTable, IQueryFilter queryFilter) {
//		if (queryFilter == null) {
//			queryFilter = new QueryFilter();
//		}
//		String sql = queryFilter.toSql(pTable);
//		logger.info("delete" + sql);
//		executeSql(sql, queryFilter.getWhereParameter());
//	}
//
//	/**
//	 * 删除表记录
//	 *
//	 * @param queryFilter
//	 */
//	@Override
//	public void delete(ITable pTable, IQueryMap queryFilter) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("delete" + pTable.getTableName());
//		DBObject whereObject = null;
//		if (queryFilter != null) {
//			whereObject = queryFilter.getWhereObject();
//		}
//		optionWhere(pTable, whereObject);
//		collection.remove(whereObject);
//	}
//
//	/**
//	 * 删除表记录
//	 */
//	@Override
//	public void delete(ITable pTable, RowBase row) {
//		DBCollection collection = db.getCollection(pTable.getTableName());
//		if (collection == null) {
//			throw new RuntimeException("当前指定的数据表" + pTable.getTableName()
//					+ "不存在！");
//		}
//		logger.info("delete" + pTable.getTableName());
//		DBObject whereObject = null;
//		if (row != null) {
//			whereObject = row.getWhereObject();
//		}
//		optionWhere(pTable, whereObject);
//		collection.remove(whereObject);
//	}
//
//	/**
//	 * 执行SQL语句返回影响行数
//	 *
//	 * @param sqlString
//	 * @param para
//	 * @return
//	 */
//	@Override
//	public int executeSql(String sqlString, GlobalParameter[] para) {
//		sqlString = replaceSql(sqlString, para);
//		SqlParserResult parserResult = null;
//		logger.info("executeSql" + sqlString);
//		try {
//			parserResult = SqlParserUtils.parserSql(sqlString, para);
//		} catch (JSQLParserException e) {
//			throw new RuntimeException("SQL语句解释错误！原因：" + e.getMessage());
//		}
//		if (parserResult.sqlType == SqlType.Select) {
//			throw new RuntimeException("executeSql方法的SQL语句不能为select语句！");
//		} else if (parserResult.sqlType == SqlType.Insert) {
//			DBCollection collection = db.getCollection(parserResult.tableName);
//			collection.insert(parserResult.insertValuesObject);
//		} else if (parserResult.sqlType == SqlType.Update) {
//			DBCollection collection = db.getCollection(parserResult.tableName);
//			collection.update(parserResult.whereObject, parserResult.setObject,
//					true, true);
//		} else if (parserResult.sqlType == SqlType.Delete) {
//			DBCollection collection = db.getCollection(parserResult.tableName);
//			collection.remove(parserResult.whereObject);
//		} else if (parserResult.sqlType == SqlType.Create) {
//			db.createCollection(parserResult.tableName, null);
//		} else if (parserResult.sqlType == SqlType.Drop) {
//			DBCollection collection = db.getCollection(parserResult.tableName);
//			collection.drop();
//		}
//		return 1;
//	}
//
//	/**
//	 * 批量执行SQL
//	 *
//	 * @param sql
//	 * @param paras
//	 */
//	@Override
//	public void executeSql(String sql, List<GlobalParameter[]> paras) {
//		if (paras == null) {
//			return;
//		}
//		logger.info("executeSql" + sql);
//		for (GlobalParameter[] item : paras) {
//			executeSql(sql, item);
//		}
//	}
//}